﻿#ifndef WRWORKTCPCOMMSERVERCTRLEVENT_H
#define WRWORKTCPCOMMSERVERCTRLEVENT_H

#include <QEvent>
#include <QSemaphore>
#include "WRGlobal.h"

//表示工作切换事件。
class WRSOFT_WORKING_COMMON_CLASS WRWorkSwitchEvent : public QEvent
{
public:
    //枚举开关行为。
    enum Action
    {
        //打开。
        Open = 0,
        //启动。
        Start = 1,
        //停止。
        Stop = 2,
        //关闭。
        Close = 3,
    };

private:
    QSemaphore* m_mutex;
    Action m_action;
    void* m_params;
    void* m_result;

    //释放当前对象所占用的相关资源。
    ~WRWorkSwitchEvent(void);

public:
    //判断指定的事件是否是当前事件。
    static bool identify(const QEvent* e);
    //判断指定的事件是否是当前事件。
    static bool identify(const QEvent& e);

    //初始化事件。
    WRWorkSwitchEvent(QSemaphore* mutex, Action action, void* params = 0, void* result = 0);

    //获取行为。
    inline Action action(void) const
    {
        return m_action;
    }
    //获取参数。
    template <class T> inline T* params(void) const
    {
        return static_cast<T*>(m_params);
    }
    //获取结果。
    template <class T> inline T* result(void) const
    {
        return static_cast<T*>(m_result);
    }

    //完成处理。
    inline void fulfil(void)
    {
        m_mutex->release();
    }
};

#endif // WRWORKTCPCOMMSERVERCTRLEVENT_H
